package main

import (
	"fmt"
	"sync"
)

// 通道chan必须使用make初始化才能使用
// 定义方法  var b chan 类型(T) 需要指定通道中的元素类型

var b chan int
var wg sync.WaitGroup
func noBufChannels(){
	wg.Add(1)
	go func ()  {
		defer wg.Done()
		x:=<-b //接收值  x
		fmt.Println("后台goroutine从通道中接收到了值",x)
	}()
	
	// fmt.Println(b)
	wg.Wait()
}
func bufChannel() {
	fmt.Println(b)  //nil值
	b=make(chan int) //不带缓冲区的通道初始化
	// 通道的操作:   发送值,只有一种方法 ch1 <- 1
	b <- 1
	fmt.Println("10发送到通道b中...")
	// 接收值  x:= <- ch1
	x:= <- b
	fmt.Println("从通道中接收到了值",x)
	// 关闭通道 close
	close(b)
}
func main() {
	// b=make(chan int,16) //带缓冲区的通道初始化
	bufChannel()
}

// 无缓冲区通道与带缓冲区通道区别
	// 无缓冲区通道容易发生死锁，且无缓冲区通道又称为同步通道
	// 带缓冲区通道称为异步通道
// 单向通道   var ch chan<- int (限制该通道只能发送，不能接收数据)